import pandas as pd
import numpy as np
from datetime import datetime
import re

def clean_numeric_column(value):
    """清理数值列，移除逗号等非数值字符"""
    if pd.isna(value) or value == '':
        return 0
    
    if isinstance(value, (int, float)):
        return value
    
    # 移除逗号、空格等字符
    cleaned = str(value).replace(',', '').replace(' ', '').replace('，', '')
    
    # 处理百分比
    if '%' in cleaned:
        cleaned = cleaned.replace('%', '')
        try:
            return float(cleaned) / 100
        except:
            return 0
    
    # 处理小数点
    if '.' in cleaned:
        try:
            return float(cleaned)
        except:
            return 0
    
    # 处理整数
    try:
        return int(cleaned)
    except:
        return 0

def preprocess_new_data(input_file, output_file):
    """预处理新数据文件"""
    print("开始预处理新数据...")
    
    # 读取数据，强制商品ID为字符串类型
    df = pd.read_excel(input_file, dtype={"商品ID": str})
    print(f"原始数据形状: {df.shape}")
    
    # 处理日期列
    print("处理日期列...")
    df['统计日期'] = pd.to_datetime(df['统计日期'], format='%Y年%m月%d日', errors='coerce')
    
    # 需要清理的数值列
    numeric_columns = [
        '商品访客数', '商品浏览量', '商品平均停留时长', '商品详情页跳出率',
        '商品加购人数', '商品加购件数', '下单金额', '下单转换率',
        '支付转换率', '支付金额', '聚划算支付金额', '老买家支付金额',
        '月累计支付金额', '年累计支付金额', '成功退款金额'
    ]
    
    # 清理数值列
    print("清理数值列...")
    for col in numeric_columns:
        if col in df.columns:
            print(f"处理列: {col}")
            df[col] = df[col].apply(clean_numeric_column)
    
    # 确保关键列的数据类型
    print("设置数据类型...")
    # 商品ID保持为字符串，不再转为int
    # df['商品ID'] = df['商品ID'].astype(int)
    
    # 移除无效数据
    print("移除无效数据...")
    initial_count = len(df)
    df = df.dropna(subset=['统计日期', '商品ID'])
    final_count = len(df)
    print(f"移除 {initial_count - final_count} 行无效数据")
    
    # 按日期和商品ID排序
    df = df.sort_values(['商品ID', '统计日期'])
    
    # 保存处理后的数据，商品ID为字符串
    print(f"保存处理后的数据到: {output_file}")
    df.to_csv(output_file, index=False, encoding='utf-8-sig')
    
    # 输出统计信息
    print(f"\n处理后的数据信息:")
    print(f"数据形状: {df.shape}")
    print(f"日期范围: {df['统计日期'].min()} 到 {df['统计日期'].max()}")
    print(f"商品数量: {df['商品ID'].nunique()}")
    print(f"总记录数: {len(df)}")
    
    # 检查关键指标
    print(f"\n关键指标统计:")
    print(f"平均访客数: {df['商品访客数'].mean():.2f}")
    print(f"平均支付金额: {df['支付金额'].mean():.2f}")
    print(f"平均支付件数: {df['支付件数'].mean():.2f}")
    
    return df

def analyze_data_quality(df):
    """分析数据质量"""
    print("\n数据质量分析:")
    
    # 检查每个商品的记录数
    product_counts = df.groupby('商品ID').size()
    print(f"每个商品的记录数统计:")
    print(f"最少记录数: {product_counts.min()}")
    print(f"最多记录数: {product_counts.max()}")
    print(f"平均记录数: {product_counts.mean():.2f}")
    
    # 检查时间连续性
    print(f"\n时间连续性检查:")
    date_range = df['统计日期'].max() - df['统计日期'].min()
    print(f"数据时间跨度: {date_range.days} 天")
    
    # 检查缺失值
    print(f"\n缺失值检查:")
    missing_data = df.isnull().sum()
    if missing_data.sum() > 0:
        print(missing_data[missing_data > 0])
    else:
        print("无缺失值")

if __name__ == "__main__":
    input_file = "../data/SPKC_Data_train.xlsx"
    output_file = "../data/processed_new_data.csv"
    
    # 预处理数据
    df = preprocess_new_data(input_file, output_file)
    
    # 分析数据质量
    analyze_data_quality(df)
    
    print(f"\n数据预处理完成！")
    print(f"处理后的数据已保存到: {output_file}") 